// 云函数入口文件
const cloud = require('wx-server-sdk')
//const rp = require('request-promise')
const TcbRouter = require('tcb-router')

cloud.init()
const db = cloud.database()
const _ = db.command
var $ = db.command.aggregate

exports.main = async (event, context) => {
  const app = new TcbRouter({
    event
  })
  console.log(event)

  //列表搜索条件
  let searchData = {}

  switch (event.needType) {
    case 1:
      searchData.need = '元宇宙'
      break;
    case 2:
      searchData.need = '游戏配音'
      break;
    case 3:
      searchData.need = '有声书'
      break;
    case 4:
      searchData.need = '动漫配音'
      break;
    default:
      break;
  }

  if (event.status == '-1') {
    console.log('没有status传入')
  } else {
    console.log('status传入' + event.status)
    searchData.status = event.status
  }
  if (event.searchKey == '') {
    console.log('没有searchKey传入')
  } else {
    console.log('searchKey传入' + event.searchKey)
    searchData.desc = {
      $regex: '.*' + event.searchKey,
      $options: 'i'
    }
  }

  console.log('searchData:'+JSON.stringify(searchData))
  console.log('searchData:'+searchData.need)
  //分支
  app.router('list', async (ctx, next) => {
    const total = await db.collection('need').where(searchData).count()
    const list = await db.collection('need').aggregate()   
      .lookup({
        from: 'user',
        localField: 'buyer_id',
        foreignField: 'langNo',
        as: 'needList'
      })
      .replaceRoot({
        newRoot: $.mergeObjects([$.arrayElemAt(['$needList', 0]), '$$ROOT'])
      })
      .project({
        needList: 0
      })
      .match(searchData)
      .skip(event.start).limit(event.count)
      .end()
      .then(res => {
        console.log(res)
        return res
      })
      .catch(err => console.error(err))
    ctx.body = {
      total,
      list
    }
  })




  app.router('detail', async (ctx, next) => {
    ctx.body = await db.collection('need').aggregate()
      .match({ need_id: event.need_id })
      .lookup({
        from: 'user',
        localField: 'buyer_id',
        foreignField: 'langNo',
        as: 'userInfo'
      })
      .replaceRoot({
        newRoot: $.mergeObjects([$.arrayElemAt(['$userInfo', 0]), '$$ROOT'])
      })
      .project({
        userInfo: 0
      })
      .end()
      .then(res => {
        return res
      })
      .catch(err => console.error(err))
  })







  return app.serve()


}











//通过外部api获取数据，并写入云数据库,且去除重复数据
//去除最大取值限制 小程序一次100条
// const MAX_LIMIT = 100
// const playlistCollection =  db.collection('playlist')
// const URL = 'http://musicapi.live/getList' 
// exports.main = async (event, context) => {
//   //突破条数限制
//   const countResult = await playlistCollection.count()
//   const total = countResult.total
//   const batchTimes = Math.ceil(total/MAX_LIMIT)
//   const tasks = []
//   for (let i=0; i<batchTimes; i++){
//     //skip(从第几条开始取).limit(取多少条)
//     let promise = playlistCollection.skip(i*MAX_LIMIT).limit(MAX_LIMIT).get()
//     tasks.push(promise)
//   }
//   let list = {
//     data:[]
//   }
//   if(tasks.length>0){
//     //用 Reduce 实现 Promise 串行执行
//     //arr 之前的值 cur 当前的值
//     list = (await Promise.all(tasks)).reduce((arr,cur)=>{
//       return {
//         data:arr.data.concat(cur.data)
//       }
//     })
//   } 
//   //获取服务器最新数据
//   const playlist = await rp(URL).then(res=>{
//     return JSON.parse(res).result 
//   })
//   //去重
//   const newData = []
//   for (let i=0, len1=playlist.length;  i<len1; i++){
//     let flag = true //标志位 判断是否重复 true不重复
//     for(let j=0, len2=list.data.length;  j<len2; j++){
//       if(playlist[i].id===list.data[j].id){
//         flag=false
//         break
//       } 
//     }  
//     if(flag){
//       newData.push(playlist[i])
//     }
//   }
//   //逐条添加到数据库
//   for (let i=0, len=newData.length; i<len; i++){
//     await playlistCollection.add({
//       data:{
//         ...newData[i],
//         //获取服务器时间
//         createTime:db.serverDate()
//       }
//     }).then(res=>{
//       console.log('插入成功')
//     }).catch(err=>{
//       console.log('插入失败')
//     })
//   }



//   // return getNeedList();
//   // async function getNeedList(){
//   //   let list = []
//   //   let code = 100
//   //   await db.collection('need').get()
//   //   .then(res => {
//   //     list = res.data
//   //     list.forEach(item => {
//   //       wx.cloud.callFunction({
//   //         name: 'getUser',
//   //         data: {
//   //           user_id: item.user_id
//   //         }
//   //       }).then(res => {
//   //         const data = res.result.data[0]
//   //         Object.assign(item, data)         
//   //       })
//   //     })
//   //     code = 200
//   //   })
//   //   .catch(err => {
//   //     console.error(err)
//   //     code = 400
//   //   })
//   // }

// }
